package com.zp.self.module.level_4_算法练习.数据结构.数组;

/**
 * @author By ZengPeng
 */
public class 力扣_453_最小操作次数使数组元素相等 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_453_最小操作次数使数组元素相等().minMoves(new int[]{1,2,3}));
//        System.out.println(new 力扣_453_最小操作次数使数组元素相等().minMoves(new int[]{1,1,1}));
    }

    /**
     * 题目：
     *
     *
     * 分析：【difficult】
     *      1.每次操作将会使 n - 1 个元素增加 1 。由于你执行了 k 次，所以一共会使 sum 增加 k * (n - 1) 。
     *        即操作结束后数组的和为 sum + k * (n - 1) 。
     *       经过k 步后， min 变为了 min + k ，也意味着此时数组的每一项都变为了 min + k ，所以操作结束后数组的和为 n * (min + k) 。
     *       sum + k * (n - 1) = n * (min + k)
     *       sum + k * n - k = n * min + n * k
     *      sum - k = n * min
     *      k = sum - n * min
     *
     *
     * 边界值 & 注意点：
     *      1.
     **/
    public int minMoves(int[] nums) {
        int res = 0;
        int min = Integer.MAX_VALUE;
        for (int num : nums) {
            min = Math.min(min, num);
        }
        for (int num : nums) {
            res += num - min;
        }
        return res;
    }
}
